/*
 * funcionesConsola.c
 *
 *  Created on: 07/10/2011
 *      Author: ronald reagan
 */


#include "../../Commons/src/includes/BibliotecasGenerales.h"
#include "./includes/funcionesFat.h"
#include "./includes/estructuraFAT.h"
#include "./includes/funcionesFat.h"
#include "./includes/funcionesUtiles.h"
#include "./includes/utils.h"
#include "./includes/funcionesConsola.h"
#include "includes/variablesGlobales.h"


int32_t fsinfo(fat_BootSector bootSector,int32_t *tablaFat){
	int32_t n,i;
	n=cantidadDeClustersLibres(tablaFat,bootSector);
	i=cantidadDeClustersOcupados(tablaFat ,bootSector);
	printf("El sector ocupa:%d bytes\n",bootSector.bytes_por_sector);
	printf("Un cluster ocupa:%d bytes\n",bootSector.bytes_por_sector*bootSector.sectores_por_cluster);
	printf("El tamaño de la FAT es de:%d kilobytes\n",(bootSector.sectores_por_FAT*bootSector.bytes_por_sector)/1024);
	printf("La cantidad de clusters Libres es:%d\n",n);
	printf("La cantidad de clusters ocupados es:%d\n",i);

	return 0;}

int32_t finfo(uint8_t * path,ptrLista listaRaiz,fat_BootSector bootSector,int32_t *tablaFat){

	int32_t n=2,z,cantTotClusters,clusterSig;
	int32_t ret;
	int32_t *sizeArchivo;
	int32_t *primerClusterArch;
	int32_t *clusterEntrada;

	if(memcmp(path,"/",strlen(path))==0){
		printf("Comando Erroneo\n");
		return 0;
	}

	cantTotClusters=(bootSector.sectores_por_FAT*bootSector.bytes_por_sector)/32; //CAMBIAR!!

ret=pathValidoCluster(path, listaRaiz,&sizeArchivo,&primerClusterArch,&clusterEntrada);

if(ret==-1){
	printf("No se encontro el archivo\n");
	return -1;
}


	n=primerClusterArch;


	if(n>cantTotClusters){
			printf("No se encontro el archivo\n");
				return -1;
		}

	if(n==0){
		printf("El archivo no tiene asociado ningun cluster\n");
		return 0;
	}
	clusterSig=tablaFat[n];





	if(clusterSig==0xfffffff){
		printf("%d\n",n);
		return 0;
	}

	z=1;


	//--------------CASO PARA 2 CLUSTERS------

	if(tablaFat[clusterSig]==0xfffffff){
				printf("%d\n",n);
				printf("%d\n",tablaFat[n]);
				return 0;}

	//------------------------------------



	while(z!=21){

		if(tablaFat[clusterSig]==0xfffffff){
			printf("%d\n",tablaFat[n]);
			break;}

		if(tablaFat[n]==0){
			printf("%d\n",n);
			break;
		}

		if(z==1){printf("%d,",n);}

		if(z==20){printf("%d\n",tablaFat[n]);
		break;}



		printf("%d,",tablaFat[n]);
		n=tablaFat[n];
		clusterSig=tablaFat[clusterSig];
		z++;

	}

	return 0;}




void *consolaPrincipal(void)
{

	char cadena[100];
	int32_t bandera,i,n=0;
	uint8_t path[100];

	memset(cadena,'\0',100);

	bandera=1;





  while(bandera){

	while(fgets(cadena,100,stdin)){

		if(memcmp(cadena,"fsinfo",6)==0){
			fsinfo(bootSector,tablaFat);
		}
		if(memcmp(cadena,"finfo(",6)==0){
			n=0;
			memset(path,'\0',100);
			for(i=6;cadena[i]!=')';i++){
				path[n]=cadena[i];
				n++;
			}


			finfo(path,listaRaiz,bootSector,tablaFat);

				}
        if(memcmp(cadena,"salir",5)==0){     //Para salir de la consola
        	break;
        }

	}
    bandera=0;
  }
  printf("gracias por usar la consola\n");
	return 0;}


